package aop

type Engine struct {
	funcHandle func()
	context    *Context
}

func NewEngine(funcHandle func()) Engine {
	return Engine{
		funcHandle: funcHandle,
		context:    newContext(10),
	}
}

func (e *Engine) Use(handle func(*Context)) {
	e.context.appendHandle(handle)
}

func (e *Engine) Run() {

	e.context.appendHandle(func(*Context) { e.funcHandle() })
	if len(e.context.handleChans) > 0 {
		e.context.Next()
	}
	e.context.reset()
}
